home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / demos / retinarave / include / pt-play.s < prev    next >
Text File  |  1980-01-03  |  23KB  |  1,169 lines

  1. ;********************************************
  2. ;* ----- Protracker V1.1B Playroutine ----- *
  3. ;* Lars "Zap" Hamre/Amiga Freelancers 1991  *
  4. ;* Bekkeliveien 10, N-2010 STRØMMEN, Norway *
  5. ;********************************************
  6.  
  7. ; VBlank Version 2:
  8. ; Call mt_init to initialize the routine, then call mt_music on
  9. ; each vertical blank (50 Hz). To end the song and turn off all
  10. ; voices, call mt_end.
  11.  
  12. ; This playroutine is not very fast, optimized or well commented,
  13. ; but all the new commands in PT1.1A should work.
  14. ; If it's not good enough, you'll have to change it yourself.
  15. ; We'll try to write a faster routine soon...
  16.  
  17. ; Changes from V1.0C playroutine:
  18. ; - Vibrato depth changed to be compatible with Noisetracker 2.0.
  19. ;   You'll have to double all vib. depths on old PT modules.
  20. ; - Funk Repeat changed to Invert Loop.
  21. ; - Period set back earlier when stopping an effect.
  22.  
  23. DMAWait = 300 ; Set this as low as possible without losing low notes.
  24.  
  25. n_note        EQU    0  ; W
  26. n_cmd        EQU    2  ; W
  27. n_cmdlo        EQU    3  ; B
  28. n_start        EQU    4  ; L
  29. n_length    EQU    8  ; W
  30. n_loopstart    EQU    10 ; L
  31. n_replen    EQU    14 ; W
  32. n_period    EQU    16 ; W
  33. n_finetune    EQU    18 ; B
  34. n_volume    EQU    19 ; B
  35. n_dmabit    EQU    20 ; W
  36. n_toneportdirec    EQU    22 ; B
  37. n_toneportspeed    EQU    23 ; B
  38. n_wantedperiod    EQU    24 ; W
  39. n_vibratocmd    EQU    26 ; B
  40. n_vibratopos    EQU    27 ; B
  41. n_tremolocmd    EQU    28 ; B
  42. n_tremolopos    EQU    29 ; B
  43. n_wavecontrol    EQU    30 ; B
  44. n_glissfunk    EQU    31 ; B
  45. n_sampleoffset    EQU    32 ; B
  46. n_pattpos    EQU    33 ; B
  47. n_loopcount    EQU    34 ; B
  48. n_funkoffset    EQU    35 ; B
  49. n_wavestart    EQU    36 ; L
  50. n_reallength    EQU    40 ; W
  51.  
  52. mt_init    Lea    Mt_data,A0
  53.     MOVE.L    A0,mt_SongDataPtr
  54.     MOVE.L    A0,A1
  55.     LEA    952(A1),A1
  56.     MOVEQ    #127,D0
  57.     MOVEQ    #0,D1
  58. mtloop    MOVE.L    D1,D2
  59.     SUBQ.W    #1,D0
  60. mtloop2    MOVE.B    (A1)+,D1
  61.     CMP.B    D2,D1
  62.     BGT.S    mtloop
  63.     DBRA    D0,mtloop2
  64.     ADDQ.B    #1,D2
  65.             
  66.     LEA    mt_SampleStarts(PC),A1
  67.     ASL.L    #8,D2
  68.     ASL.L    #2,D2
  69.     ADD.L    #1084,D2
  70.     ADD.L    A0,D2
  71.     MOVE.L    D2,A2
  72.     MOVEQ    #30,D0
  73. mtloop3    CLR.L    (A2)
  74.     MOVE.L    A2,(A1)+
  75.     MOVEQ    #0,D1
  76.     MOVE.W    42(A0),D1
  77.     ASL.L    #1,D1
  78.     ADD.L    D1,A2
  79.     ADD.L    #30,A0
  80.     DBRA    D0,mtloop3
  81.  
  82.     OR.B    #2,$BFE001
  83.     MOVE.B    #6,mt_speed
  84.     CLR.B    mt_counter
  85.     CLR.B    mt_SongPos
  86.     CLR.W    mt_PatternPos
  87. mt_end    CLR.W    $DFF0A8
  88.     CLR.W    $DFF0B8
  89.     CLR.W    $DFF0C8
  90.     CLR.W    $DFF0D8
  91.     MOVE.W    #$F,$DFF096
  92.     RTS
  93.  
  94. mt_music
  95.     MOVEM.L    D0-D4/A0-A6,-(SP)
  96.     sub.w #$022,Equalizer1
  97.     bpl Eq1Ok
  98.     move.w #0,Equalizer1
  99. Eq1Ok:
  100.     sub.w #$020,Equalizer2
  101.     bpl Eq2Ok
  102.     move.w #0,Equalizer2
  103. Eq2Ok:
  104.     sub.w #$222,Equalizer3
  105.     bpl Eq3Ok
  106.     move.w #0,Equalizer3
  107. Eq3Ok:
  108.     sub.w #$202,Equalizer4
  109.     bpl Eq4Ok
  110.     move.w #0,Equalizer4
  111. Eq4Ok:
  112.  
  113.  
  114.  
  115.     ADDQ.B    #1,mt_counter
  116.     MOVE.B    mt_counter(PC),D0
  117.     CMP.B    mt_speed(PC),D0
  118.     BLO.S    mt_NoNewNote
  119.     CLR.B    mt_counter
  120.     TST.B    mt_PattDelTime2
  121.     BEQ.S    mt_GetNewNote
  122.     BSR.S    mt_NoNewAllChannels
  123.     BRA    mt_dskip
  124.  
  125. mt_NoNewNote
  126.     BSR.S    mt_NoNewAllChannels
  127.     BRA    mt_NoNewPosYet
  128.  
  129. mt_NoNewAllChannels
  130.     LEA    $DFF0A0,A5
  131.     LEA    mt_chan1temp(PC),A6
  132.     BSR    mt_CheckEfx
  133.     LEA    $DFF0B0,A5
  134.     LEA    mt_chan2temp(PC),A6
  135.     BSR    mt_CheckEfx
  136.     LEA    $DFF0C0,A5
  137.     LEA    mt_chan3temp(PC),A6
  138.     BSR    mt_CheckEfx
  139.     LEA    $DFF0D0,A5
  140.     LEA    mt_chan4temp(PC),A6
  141.     BRA    mt_CheckEfx
  142.  
  143. mt_GetNewNote
  144.     MOVE.L    mt_SongDataPtr(PC),A0
  145.     LEA    12(A0),A3
  146.     LEA    952(A0),A2    ;pattpo
  147.     LEA    1084(A0),A0    ;patterndata
  148.     MOVEQ    #0,D0
  149.     MOVEQ    #0,D1
  150.     MOVE.B    mt_SongPos(PC),D0
  151.     MOVE.B    (A2,D0.W),D1
  152. ;this is is a note steve
  153.     ASL.L    #8,D1
  154.     ASL.L    #2,D1
  155.     ADD.W    mt_PatternPos(PC),D1
  156.     CLR.W    mt_DMACONtemp
  157.  
  158.     LEA    $DFF0A0,A5
  159.     LEA    mt_chan1temp(PC),A6
  160.     BSR.S    mt_PlayVoice
  161.     LEA    $DFF0B0,A5
  162.     LEA    mt_chan2temp(PC),A6
  163.     BSR.S    mt_PlayVoice
  164.     LEA    $DFF0C0,A5
  165.     LEA    mt_chan3temp(PC),A6
  166.     BSR.S    mt_PlayVoice
  167.     LEA    $DFF0D0,A5
  168.     LEA    mt_chan4temp(PC),A6
  169.     BSR.S    mt_PlayVoice
  170.     BRA    mt_SetDMA
  171.  
  172. mt_PlayVoice
  173.     TST.L    (A6)
  174.     BNE.S    mt_plvskip
  175.     BSR    mt_PerNop
  176. mt_plvskip
  177.     MOVE.L    (A0,D1.L),(A6)
  178.     ADDQ.L    #4,D1
  179.     MOVEQ    #0,D2
  180.     MOVE.B    n_cmd(A6),D2
  181.     AND.B    #$F0,D2
  182.     LSR.B    #4,D2
  183.     MOVE.B    (A6),D0
  184.     AND.B    #$F0,D0
  185.     OR.B    D0,D2
  186.     TST.B    D2
  187.     BEQ    mt_SetRegs
  188.     MOVEQ    #0,D3
  189.     LEA    mt_SampleStarts(PC),A1
  190.     MOVE    D2,D4
  191.     SUBQ.L    #1,D2
  192.     ASL.L    #2,D2
  193.  
  194.     cmp.l #$dff0a0,a5
  195.     bne NoEqu1
  196.     move.w #$0ff,Equalizer1
  197. NoEqu1:
  198.     cmp.l #$dff0b0,a5
  199.     bne NoEqu2
  200.     move.w #$f0,Equalizer2
  201. NoEqu2:
  202.     cmp.l #$dff0c0,a5
  203.     bne NoEqu3
  204.     move.w #$fFF,Equalizer3
  205. NoEqu3:
  206.     cmp.l #$dff0d0,a5
  207.     bne NoEqu4
  208.     move.w #$f0f,Equalizer4
  209. NoEqu4:
  210.  
  211.  
  212.     MULU    #30,D4
  213.     MOVE.L    (A1,D2.L),n_start(A6)
  214.     MOVE.W    (A3,D4.L),n_length(A6)
  215.     MOVE.W    (A3,D4.L),n_reallength(A6)
  216.     MOVE.B    2(A3,D4.L),n_finetune(A6)
  217.     MOVE.B    3(A3,D4.L),n_volume(A6)
  218.     MOVE.W    4(A3,D4.L),D3 ; Get repeat
  219.     TST.W    D3
  220.     BEQ.S    mt_NoLoop
  221.     MOVE.L    n_start(A6),D2    ; Get start
  222.     ASL.W    #1,D3
  223.     ADD.L    D3,D2        ; Add repeat
  224.     MOVE.L    D2,n_loopstart(A6)
  225.     MOVE.L    D2,n_wavestart(A6)
  226.     MOVE.W    4(A3,D4.L),D0    ; Get repeat
  227.     ADD.W    6(A3,D4.L),D0    ; Add replen
  228.     MOVE.W    D0,n_length(A6)
  229.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  230.     MOVEQ    #0,D0
  231.     MOVE.B    n_volume(A6),D0
  232.     MOVE.W    D0,8(A5)    ; Set volume
  233.     BRA.S    mt_SetRegs
  234.  
  235. mt_NoLoop
  236.     MOVE.L    n_start(A6),D2
  237.     ADD.L    D3,D2
  238.     MOVE.L    D2,n_loopstart(A6)
  239.     MOVE.L    D2,n_wavestart(A6)
  240.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  241.     MOVEQ    #0,D0
  242.     MOVE.B    n_volume(A6),D0
  243.     MOVE.W    D0,8(A5)    ; Set volume
  244. mt_SetRegs
  245.     MOVE.W    (A6),D0
  246.     AND.W    #$0FFF,D0
  247.     BEQ    mt_CheckMoreEfx    ; If no note
  248.     MOVE.W    2(A6),D0
  249.     AND.W    #$0FF0,D0
  250.     CMP.W    #$0E50,D0
  251.     BEQ.S    mt_DoSetFineTune
  252.     MOVE.B    2(A6),D0
  253.     AND.B    #$0F,D0
  254.     CMP.B    #3,D0    ; TonePortamento
  255.     BEQ.S    mt_ChkTonePorta
  256.     CMP.B    #5,D0
  257.     BEQ.S    mt_ChkTonePorta
  258.     CMP.B    #9,D0    ; Sample Offset
  259.     BNE.S    mt_SetPeriod
  260.     BSR    mt_CheckMoreEfx
  261.     BRA.S    mt_SetPeriod
  262.  
  263. mt_DoSetFineTune
  264.     BSR    mt_SetFineTune
  265.     BRA.S    mt_SetPeriod
  266.  
  267. mt_ChkTonePorta
  268.     BSR    mt_SetTonePorta
  269.     BRA    mt_CheckMoreEfx
  270.  
  271. mt_SetPeriod
  272.     MOVEM.L    D0-D1/A0-A1,-(SP)
  273.     MOVE.W    (A6),D1
  274.     AND.W    #$0FFF,D1
  275.     LEA    mt_PeriodTable(PC),A1
  276.     MOVEQ    #0,D0
  277.     MOVEQ    #36,D7
  278. mt_ftuloop
  279.     CMP.W    (A1,D0.W),D1
  280.     BHS.S    mt_ftufound
  281.     ADDQ.L    #2,D0
  282.     DBRA    D7,mt_ftuloop
  283. mt_ftufound
  284.     MOVEQ    #0,D1
  285.     MOVE.B    n_finetune(A6),D1
  286.     MULU    #36*2,D1
  287.     ADD.L    D1,A1
  288.     MOVE.W    (A1,D0.W),n_period(A6)
  289.     MOVEM.L    (SP)+,D0-D1/A0-A1
  290.  
  291.     MOVE.W    2(A6),D0
  292.     AND.W    #$0FF0,D0
  293.     CMP.W    #$0ED0,D0 ; Notedelay
  294.     BEQ    mt_CheckMoreEfx
  295.  
  296.     MOVE.W    n_dmabit(A6),$DFF096
  297.     BTST    #2,n_wavecontrol(A6)
  298.     BNE.S    mt_vibnoc
  299.     CLR.B    n_vibratopos(A6)
  300. mt_vibnoc
  301.     BTST    #6,n_wavecontrol(A6)
  302.     BNE.S    mt_trenoc
  303.     CLR.B    n_tremolopos(A6)
  304. mt_trenoc
  305.     MOVE.L    n_start(A6),(A5)    ; Set start
  306.     MOVE.W    n_length(A6),4(A5)    ; Set length
  307.     MOVE.W    n_period(A6),D0
  308.     MOVE.W    D0,6(A5)        ; Set period
  309.     MOVE.W    n_dmabit(A6),D0
  310.     OR.W    D0,mt_DMACONtemp
  311.     BRA    mt_CheckMoreEfx
  312.  
  313. mt_SetDMA
  314.     MOVE.W    #300,D0
  315. mt_WaitDMA
  316.     DBRA    D0,mt_WaitDMA
  317.     MOVE.W    mt_DMACONtemp(PC),D0
  318.     OR.W    #$8000,D0
  319.     MOVE.W    D0,$DFF096
  320.     MOVE.W    #300,D0
  321. mt_WaitDMA2
  322.     DBRA    D0,mt_WaitDMA2
  323.  
  324.     LEA    $DFF000,A5
  325.     LEA    mt_chan4temp(PC),A6
  326.     MOVE.L    n_loopstart(A6),$D0(A5)
  327.     MOVE.W    n_replen(A6),$D4(A5)
  328.     LEA    mt_chan3temp(PC),A6
  329.     MOVE.L    n_loopstart(A6),$C0(A5)
  330.     MOVE.W    n_replen(A6),$C4(A5)
  331.     LEA    mt_chan2temp(PC),A6
  332.     MOVE.L    n_loopstart(A6),$B0(A5)
  333.     MOVE.W    n_replen(A6),$B4(A5)
  334.     LEA    mt_chan1temp(PC),A6
  335.     MOVE.L    n_loopstart(A6),$A0(A5)
  336.     MOVE.W    n_replen(A6),$A4(A5)
  337.  
  338. mt_dskip
  339.     ADD.W    #16,mt_PatternPos
  340.     MOVE.B    mt_PattDelTime,D0
  341.     BEQ.S    mt_dskc
  342.     MOVE.B    D0,mt_PattDelTime2
  343.     CLR.B    mt_PattDelTime
  344. mt_dskc    TST.B    mt_PattDelTime2
  345.     BEQ.S    mt_dska
  346.     SUBQ.B    #1,mt_PattDelTime2
  347.     BEQ.S    mt_dska
  348.     SUB.W    #16,mt_PatternPos
  349. mt_dska    TST.B    mt_PBreakFlag
  350.     BEQ.S    mt_nnpysk
  351.     SF    mt_PBreakFlag
  352.     MOVEQ    #0,D0
  353.     MOVE.B    mt_PBreakPos(PC),D0
  354.     CLR.B    mt_PBreakPos
  355.     LSL.W    #4,D0
  356.     MOVE.W    D0,mt_PatternPos
  357. mt_nnpysk
  358.     CMP.W    #1024,mt_PatternPos
  359.     BLO.S    mt_NoNewPosYet
  360. mt_NextPosition    
  361.     MOVEQ    #0,D0
  362.     MOVE.B    mt_PBreakPos(PC),D0
  363.     LSL.W    #4,D0
  364.     MOVE.W    D0,mt_PatternPos
  365.     CLR.B    mt_PBreakPos
  366.     CLR.B    mt_PosJumpFlag
  367.     ADDQ.B    #1,mt_SongPos
  368.     AND.B    #$7F,mt_SongPos
  369.     MOVE.B    mt_SongPos(PC),D1
  370.     MOVE.L    mt_SongDataPtr(PC),A0
  371.     CMP.B    950(A0),D1
  372.     BLO.S    mt_NoNewPosYet
  373.     CLR.B    mt_SongPos
  374. mt_NoNewPosYet    
  375.     TST.B    mt_PosJumpFlag
  376.     BNE.S    mt_NextPosition
  377.     MOVEM.L    (SP)+,D0-D4/A0-A6
  378.     RTS
  379.  
  380. mt_CheckEfx
  381.     BSR    mt_UpdateFunk
  382.     MOVE.W    n_cmd(A6),D0
  383.     AND.W    #$0FFF,D0
  384.     BEQ.S    mt_PerNop
  385.     MOVE.B    n_cmd(A6),D0
  386.     AND.B    #$0F,D0
  387.     BEQ.S    mt_Arpeggio
  388.     CMP.B    #1,D0
  389.     BEQ    mt_PortaUp
  390.     CMP.B    #2,D0
  391.     BEQ    mt_PortaDown
  392.     CMP.B    #3,D0
  393.     BEQ    mt_TonePortamento
  394.     CMP.B    #4,D0
  395.     BEQ    mt_Vibrato
  396.     CMP.B    #5,D0
  397.     BEQ    mt_TonePlusVolSlide
  398.     CMP.B    #6,D0
  399.     BEQ    mt_VibratoPlusVolSlide
  400.     CMP.B    #$E,D0
  401.     BEQ    mt_E_Commands
  402. SetBack    MOVE.W    n_period(A6),6(A5)
  403.     CMP.B    #7,D0
  404.     BEQ    mt_Tremolo
  405.     CMP.B    #$A,D0
  406.     BEQ    mt_VolumeSlide
  407. mt_Return2
  408.     RTS
  409.  
  410. mt_PerNop
  411.     MOVE.W    n_period(A6),6(A5)
  412.     RTS
  413.  
  414. mt_Arpeggio
  415.     MOVEQ    #0,D0
  416.     MOVE.B    mt_counter(PC),D0
  417.     DIVS    #3,D0
  418.     SWAP    D0
  419.     CMP.W    #0,D0
  420.     BEQ.S    mt_Arpeggio2
  421.     CMP.W    #2,D0
  422.     BEQ.S    mt_Arpeggio1
  423.     MOVEQ    #0,D0
  424.     MOVE.B    n_cmdlo(A6),D0
  425.     LSR.B    #4,D0
  426.     BRA.S    mt_Arpeggio3
  427.  
  428. mt_Arpeggio1
  429.     MOVEQ    #0,D0
  430.     MOVE.B    n_cmdlo(A6),D0
  431.     AND.B    #15,D0
  432.     BRA.S    mt_Arpeggio3
  433.  
  434. mt_Arpeggio2
  435.     MOVE.W    n_period(A6),D2
  436.     BRA.S    mt_Arpeggio4
  437.  
  438. mt_Arpeggio3
  439.     ASL.W    #1,D0
  440.     MOVEQ    #0,D1
  441.     MOVE.B    n_finetune(A6),D1
  442.     MULU    #36*2,D1
  443.     LEA    mt_PeriodTable(PC),A0
  444.     ADD.L    D1,A0
  445.     MOVEQ    #0,D1
  446.     MOVE.W    n_period(A6),D1
  447.     MOVEQ    #36,D7
  448. mt_arploop
  449.     MOVE.W    (A0,D0.W),D2
  450.     CMP.W    (A0),D1
  451.     BHS.S    mt_Arpeggio4
  452.     ADDQ.L    #2,A0
  453.     DBRA    D7,mt_arploop
  454.     RTS
  455.  
  456. mt_Arpeggio4
  457.     MOVE.W    D2,6(A5)
  458.     RTS
  459.  
  460. mt_FinePortaUp
  461.     TST.B    mt_counter
  462.     BNE.S    mt_Return2
  463.     MOVE.B    #$0F,mt_LowMask
  464. mt_PortaUp
  465.     MOVEQ    #0,D0
  466.     MOVE.B    n_cmdlo(A6),D0
  467.     AND.B    mt_LowMask(PC),D0
  468.     MOVE.B    #$FF,mt_LowMask
  469.     SUB.W    D0,n_period(A6)
  470.     MOVE.W    n_period(A6),D0
  471.     AND.W    #$0FFF,D0
  472.     CMP.W    #113,D0
  473.     BPL.S    mt_PortaUskip
  474.     AND.W    #$F000,n_period(A6)
  475.     OR.W    #113,n_period(A6)
  476. mt_PortaUskip
  477.     MOVE.W    n_period(A6),D0
  478.     AND.W    #$0FFF,D0
  479.     MOVE.W    D0,6(A5)
  480.     RTS    
  481.  
  482. mt_FinePortaDown
  483.     TST.B    mt_counter
  484.     BNE    mt_Return2
  485.     MOVE.B    #$0F,mt_LowMask
  486. mt_PortaDown
  487.     CLR.W    D0
  488.     MOVE.B    n_cmdlo(A6),D0
  489.     AND.B    mt_LowMask(PC),D0
  490.     MOVE.B    #$FF,mt_LowMask
  491.     ADD.W    D0,n_period(A6)
  492.     MOVE.W    n_period(A6),D0
  493.     AND.W    #$0FFF,D0
  494.     CMP.W    #856,D0
  495.     BMI.S    mt_PortaDskip
  496.     AND.W    #$F000,n_period(A6)
  497.     OR.W    #856,n_period(A6)
  498. mt_PortaDskip
  499.     MOVE.W    n_period(A6),D0
  500.     AND.W    #$0FFF,D0
  501.     MOVE.W    D0,6(A5)
  502.     RTS
  503.  
  504. mt_SetTonePorta
  505.     MOVE.L    A0,-(SP)
  506.     MOVE.W    (A6),D2
  507.     AND.W    #$0FFF,D2
  508.     MOVEQ    #0,D0
  509.     MOVE.B    n_finetune(A6),D0
  510.     MULU    #37*2,D0
  511.     LEA    mt_PeriodTable(PC),A0
  512.     ADD.L    D0,A0
  513.     MOVEQ    #0,D0
  514. mt_StpLoop
  515.     CMP.W    (A0,D0.W),D2
  516.     BHS.S    mt_StpFound
  517.     ADDQ.W    #2,D0
  518.     CMP.W    #37*2,D0
  519.     BLO.S    mt_StpLoop
  520.     MOVEQ    #35*2,D0
  521. mt_StpFound
  522.     MOVE.B    n_finetune(A6),D2
  523.     AND.B    #8,D2
  524.     BEQ.S    mt_StpGoss
  525.     TST.W    D0
  526.     BEQ.S    mt_StpGoss
  527.     SUBQ.W    #2,D0
  528. mt_StpGoss
  529.     MOVE.W    (A0,D0.W),D2
  530.     MOVE.L    (SP)+,A0
  531.     MOVE.W    D2,n_wantedperiod(A6)
  532.     MOVE.W    n_period(A6),D0
  533.     CLR.B    n_toneportdirec(A6)
  534.     CMP.W    D0,D2
  535.     BEQ.S    mt_ClearTonePorta
  536.     BGE    mt_Return2
  537.     MOVE.B    #1,n_toneportdirec(A6)
  538.     RTS
  539.  
  540. mt_ClearTonePorta
  541.     CLR.W    n_wantedperiod(A6)
  542.     RTS
  543.  
  544. mt_TonePortamento
  545.     MOVE.B    n_cmdlo(A6),D0
  546.     BEQ.S    mt_TonePortNoChange
  547.     MOVE.B    D0,n_toneportspeed(A6)
  548.     CLR.B    n_cmdlo(A6)
  549. mt_TonePortNoChange
  550.     TST.W    n_wantedperiod(A6)
  551.     BEQ    mt_Return2
  552.     MOVEQ    #0,D0
  553.     MOVE.B    n_toneportspeed(A6),D0
  554.     TST.B    n_toneportdirec(A6)
  555.     BNE.S    mt_TonePortaUp
  556. mt_TonePortaDown
  557.     ADD.W    D0,n_period(A6)
  558.     MOVE.W    n_wantedperiod(A6),D0
  559.     CMP.W    n_period(A6),D0
  560.     BGT.S    mt_TonePortaSetPer
  561.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  562.     CLR.W    n_wantedperiod(A6)
  563.     BRA.S    mt_TonePortaSetPer
  564.  
  565. mt_TonePortaUp
  566.     SUB.W    D0,n_period(A6)
  567.     MOVE.W    n_wantedperiod(A6),D0
  568.     CMP.W    n_period(A6),D0
  569.     BLT.S    mt_TonePortaSetPer
  570.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  571.     CLR.W    n_wantedperiod(A6)
  572.  
  573. mt_TonePortaSetPer
  574.     MOVE.W    n_period(A6),D2
  575.     MOVE.B    n_glissfunk(A6),D0
  576.     AND.B    #$0F,D0
  577.     BEQ.S    mt_GlissSkip
  578.     MOVEQ    #0,D0
  579.     MOVE.B    n_finetune(A6),D0
  580.     MULU    #36*2,D0
  581.     LEA    mt_PeriodTable(PC),A0
  582.     ADD.L    D0,A0
  583.     MOVEQ    #0,D0
  584. mt_GlissLoop
  585.     CMP.W    (A0,D0.W),D2
  586.     BHS.S    mt_GlissFound
  587.     ADDQ.W    #2,D0
  588.     CMP.W    #36*2,D0
  589.     BLO.S    mt_GlissLoop
  590.     MOVEQ    #35*2,D0
  591. mt_GlissFound
  592.     MOVE.W    (A0,D0.W),D2
  593. mt_GlissSkip
  594.     MOVE.W    D2,6(A5) ; Set period
  595.     RTS
  596.  
  597. mt_Vibrato
  598.     MOVE.B    n_cmdlo(A6),D0
  599.     BEQ.S    mt_Vibrato2
  600.     MOVE.B    n_vibratocmd(A6),D2
  601.     AND.B    #$0F,D0
  602.     BEQ.S    mt_vibskip
  603.     AND.B    #$F0,D2
  604.     OR.B    D0,D2
  605. mt_vibskip
  606.     MOVE.B    n_cmdlo(A6),D0
  607.     AND.B    #$F0,D0
  608.     BEQ.S    mt_vibskip2
  609.     AND.B    #$0F,D2
  610.     OR.B    D0,D2
  611. mt_vibskip2
  612.     MOVE.B    D2,n_vibratocmd(A6)
  613. mt_Vibrato2
  614.     MOVE.B    n_vibratopos(A6),D0
  615.     LEA    mt_VibratoTable(PC),A4
  616.     LSR.W    #2,D0
  617.     AND.W    #$001F,D0
  618.     MOVEQ    #0,D2
  619.     MOVE.B    n_wavecontrol(A6),D2
  620.     AND.B    #$03,D2
  621.     BEQ.S    mt_vib_sine
  622.     LSL.B    #3,D0
  623.     CMP.B    #1,D2
  624.     BEQ.S    mt_vib_rampdown
  625.     MOVE.B    #255,D2
  626.     BRA.S    mt_vib_set
  627. mt_vib_rampdown
  628.     TST.B    n_vibratopos(A6)
  629.     BPL.S    mt_vib_rampdown2
  630.     MOVE.B    #255,D2
  631.     SUB.B    D0,D2
  632.     BRA.S    mt_vib_set
  633. mt_vib_rampdown2
  634.     MOVE.B    D0,D2
  635.     BRA.S    mt_vib_set
  636. mt_vib_sine
  637.     MOVE.B    0(A4,D0.W),D2
  638. mt_vib_set
  639.     MOVE.B    n_vibratocmd(A6),D0
  640.     AND.W    #15,D0
  641.     MULU    D0,D2
  642.     LSR.W    #7,D2
  643.     MOVE.W    n_period(A6),D0
  644.     TST.B    n_vibratopos(A6)
  645.     BMI.S    mt_VibratoNeg
  646.     ADD.W    D2,D0
  647.     BRA.S    mt_Vibrato3
  648. mt_VibratoNeg
  649.     SUB.W    D2,D0
  650. mt_Vibrato3
  651.     MOVE.W    D0,6(A5)
  652.     MOVE.B    n_vibratocmd(A6),D0
  653.     LSR.W    #2,D0
  654.     AND.W    #$003C,D0
  655.     ADD.B    D0,n_vibratopos(A6)
  656.     RTS
  657.  
  658. mt_TonePlusVolSlide
  659.     BSR    mt_TonePortNoChange
  660.     BRA    mt_VolumeSlide
  661.  
  662. mt_VibratoPlusVolSlide
  663.     BSR.S    mt_Vibrato2
  664.     BRA    mt_VolumeSlide
  665.  
  666. mt_Tremolo
  667.     MOVE.B    n_cmdlo(A6),D0
  668.     BEQ.S    mt_Tremolo2
  669.     MOVE.B    n_tremolocmd(A6),D2
  670.     AND.B    #$0F,D0
  671.     BEQ.S    mt_treskip
  672.     AND.B    #$F0,D2
  673.     OR.B    D0,D2
  674. mt_treskip
  675.     MOVE.B    n_cmdlo(A6),D0
  676.     AND.B    #$F0,D0
  677.     BEQ.S    mt_treskip2
  678.     AND.B    #$0F,D2
  679.     OR.B    D0,D2
  680. mt_treskip2
  681.     MOVE.B    D2,n_tremolocmd(A6)
  682. mt_Tremolo2
  683.     MOVE.B    n_tremolopos(A6),D0
  684.     LEA    mt_VibratoTable(PC),A4
  685.     LSR.W    #2,D0
  686.     AND.W    #$001F,D0
  687.     MOVEQ    #0,D2
  688.     MOVE.B    n_wavecontrol(A6),D2
  689.     LSR.B    #4,D2
  690.     AND.B    #$03,D2
  691.     BEQ.S    mt_tre_sine
  692.     LSL.B    #3,D0
  693.     CMP.B    #1,D2
  694.     BEQ.S    mt_tre_rampdown
  695.     MOVE.B    #255,D2
  696.     BRA.S    mt_tre_set
  697. mt_tre_rampdown
  698.     TST.B    n_vibratopos(A6)
  699.     BPL.S    mt_tre_rampdown2
  700.     MOVE.B    #255,D2
  701.     SUB.B    D0,D2
  702.     BRA.S    mt_tre_set
  703. mt_tre_rampdown2
  704.     MOVE.B    D0,D2
  705.     BRA.S    mt_tre_set
  706. mt_tre_sine
  707.     MOVE.B    0(A4,D0.W),D2
  708. mt_tre_set
  709.     MOVE.B    n_tremolocmd(A6),D0
  710.     AND.W    #15,D0
  711.     MULU    D0,D2
  712.     LSR.W    #6,D2
  713.     MOVEQ    #0,D0
  714.     MOVE.B    n_volume(A6),D0
  715.     TST.B    n_tremolopos(A6)
  716.     BMI.S    mt_TremoloNeg
  717.     ADD.W    D2,D0
  718.     BRA.S    mt_Tremolo3
  719. mt_TremoloNeg
  720.     SUB.W    D2,D0
  721. mt_Tremolo3
  722.     BPL.S    mt_TremoloSkip
  723.     CLR.W    D0
  724. mt_TremoloSkip
  725.     CMP.W    #$40,D0
  726.     BLS.S    mt_TremoloOk
  727.     MOVE.W    #$40,D0
  728. mt_TremoloOk
  729.     MOVE.W    D0,8(A5)
  730.     MOVE.B    n_tremolocmd(A6),D0
  731.     LSR.W    #2,D0
  732.     AND.W    #$003C,D0
  733.     ADD.B    D0,n_tremolopos(A6)
  734.     RTS
  735.  
  736. mt_SampleOffset
  737.     MOVEQ    #0,D0
  738.     MOVE.B    n_cmdlo(A6),D0
  739.     BEQ.S    mt_sononew
  740.     MOVE.B    D0,n_sampleoffset(A6)
  741. mt_sononew
  742.     MOVE.B    n_sampleoffset(A6),D0
  743.     LSL.W    #7,D0
  744.     CMP.W    n_length(A6),D0
  745.     BGE.S    mt_sofskip
  746.     SUB.W    D0,n_length(A6)
  747.     LSL.W    #1,D0
  748.     ADD.L    D0,n_start(A6)
  749.     RTS
  750. mt_sofskip
  751.     MOVE.W    #$0001,n_length(A6)
  752.     RTS
  753.  
  754. mt_VolumeSlide
  755.     MOVEQ    #0,D0
  756.     MOVE.B    n_cmdlo(A6),D0
  757.     LSR.B    #4,D0
  758.     TST.B    D0
  759.     BEQ.S    mt_VolSlideDown
  760. mt_VolSlideUp
  761.     ADD.B    D0,n_volume(A6)
  762.     CMP.B    #$40,n_volume(A6)
  763.     BMI.S    mt_vsuskip
  764.     MOVE.B    #$40,n_volume(A6)
  765. mt_vsuskip
  766.     MOVE.B    n_volume(A6),D0
  767.     MOVE.W    D0,8(A5)
  768.     RTS
  769.  
  770. mt_VolSlideDown
  771.     MOVEQ    #0,D0
  772.     MOVE.B    n_cmdlo(A6),D0
  773.     AND.B    #$0F,D0
  774. mt_VolSlideDown2
  775.     SUB.B    D0,n_volume(A6)
  776.     BPL.S    mt_vsdskip
  777.     CLR.B    n_volume(A6)
  778. mt_vsdskip
  779.     MOVE.B    n_volume(A6),D0
  780.     MOVE.W    D0,8(A5)
  781.     RTS
  782.  
  783. mt_PositionJump
  784.     MOVE.B    n_cmdlo(A6),D0
  785.     SUBQ.B    #1,D0
  786.     MOVE.B    D0,mt_SongPos
  787. mt_pj2    CLR.B    mt_PBreakPos
  788.     ST     mt_PosJumpFlag
  789.     RTS
  790.  
  791. mt_VolumeChange
  792.     MOVEQ    #0,D0
  793.     MOVE.B    n_cmdlo(A6),D0
  794.     CMP.B    #$40,D0
  795.     BLS.S    mt_VolumeOk
  796.     MOVEQ    #$40,D0
  797. mt_VolumeOk
  798.     MOVE.B    D0,n_volume(A6)
  799.     MOVE.W    D0,8(A5)
  800.     RTS
  801.  
  802. mt_PatternBreak
  803.     MOVEQ    #0,D0
  804.     MOVE.B    n_cmdlo(A6),D0
  805.     MOVE.L    D0,D2
  806.     LSR.B    #4,D0
  807.     MULU    #10,D0
  808.     AND.B    #$0F,D2
  809.     ADD.B    D2,D0
  810.     CMP.B    #63,D0
  811.     BHI.S    mt_pj2
  812.     MOVE.B    D0,mt_PBreakPos
  813.     ST    mt_PosJumpFlag
  814.     RTS
  815.  
  816. mt_SetSpeed
  817.     MOVE.B    3(A6),D0
  818.     BEQ    mt_Return2
  819.     CLR.B    mt_counter
  820.     MOVE.B    D0,mt_speed
  821.     RTS
  822.  
  823. mt_CheckMoreEfx
  824.     BSR    mt_UpdateFunk
  825.     MOVE.B    2(A6),D0
  826.     AND.B    #$0F,D0
  827.     CMP.B    #$9,D0
  828.     BEQ    mt_SampleOffset
  829.     CMP.B    #$B,D0
  830.     BEQ    mt_PositionJump
  831.     CMP.B    #$D,D0
  832.     BEQ.S    mt_PatternBreak
  833.     CMP.B    #$E,D0
  834.     BEQ.S    mt_E_Commands
  835.     CMP.B    #$F,D0
  836.     BEQ.S    mt_SetSpeed
  837.     CMP.B    #$C,D0
  838.     BEQ    mt_VolumeChange
  839.     BRA    mt_PerNop
  840.  
  841. mt_E_Commands
  842.     MOVE.B    n_cmdlo(A6),D0
  843.     AND.B    #$F0,D0
  844.     LSR.B    #4,D0
  845.     BEQ.S    mt_FilterOnOff
  846.     CMP.B    #1,D0
  847.     BEQ    mt_FinePortaUp
  848.     CMP.B    #2,D0
  849.     BEQ    mt_FinePortaDown
  850.     CMP.B    #3,D0
  851.     BEQ.S    mt_SetGlissControl
  852.     CMP.B    #4,D0
  853.     BEQ    mt_SetVibratoControl
  854.     CMP.B    #5,D0
  855.     BEQ    mt_SetFineTune
  856.     CMP.B    #6,D0
  857.     BEQ    mt_JumpLoop
  858.     CMP.B    #7,D0
  859.     BEQ    mt_SetTremoloControl
  860.     CMP.B    #9,D0
  861.     BEQ    mt_RetrigNote
  862.     CMP.B    #$A,D0
  863.     BEQ    mt_VolumeFineUp
  864.     CMP.B    #$B,D0
  865.     BEQ    mt_VolumeFineDown
  866.     CMP.B    #$C,D0
  867.     BEQ    mt_NoteCut
  868.     CMP.B    #$D,D0
  869.     BEQ    mt_NoteDelay
  870.     CMP.B    #$E,D0
  871.     BEQ    mt_PatternDelay
  872.     CMP.B    #$F,D0
  873.     BEQ    mt_FunkIt
  874.     RTS
  875.  
  876. mt_FilterOnOff
  877.     MOVE.B    n_cmdlo(A6),D0
  878.     AND.B    #1,D0
  879.     ASL.B    #1,D0
  880.     AND.B    #$FD,$BFE001
  881.     OR.B    D0,$BFE001
  882.     RTS    
  883.  
  884. mt_SetGlissControl
  885.     MOVE.B    n_cmdlo(A6),D0
  886.     AND.B    #$0F,D0
  887.     AND.B    #$F0,n_glissfunk(A6)
  888.     OR.B    D0,n_glissfunk(A6)
  889.     RTS
  890.  
  891. mt_SetVibratoControl
  892.     MOVE.B    n_cmdlo(A6),D0
  893.     AND.B    #$0F,D0
  894.     AND.B    #$F0,n_wavecontrol(A6)
  895.     OR.B    D0,n_wavecontrol(A6)
  896.     RTS
  897.  
  898. mt_SetFineTune
  899.     MOVE.B    n_cmdlo(A6),D0
  900.     AND.B    #$0F,D0
  901.     MOVE.B    D0,n_finetune(A6)
  902.     RTS
  903.  
  904. mt_JumpLoop
  905.     TST.B    mt_counter
  906.     BNE    mt_Return2
  907.     MOVE.B    n_cmdlo(A6),D0
  908.     AND.B    #$0F,D0
  909.     BEQ.S    mt_SetLoop
  910.     TST.B    n_loopcount(A6)
  911.     BEQ.S    mt_jumpcnt
  912.     SUBQ.B    #1,n_loopcount(A6)
  913.     BEQ    mt_Return2
  914. mt_jmploop    MOVE.B    n_pattpos(A6),mt_PBreakPos
  915.     ST    mt_PBreakFlag
  916.     RTS
  917.  
  918. mt_jumpcnt
  919.     MOVE.B    D0,n_loopcount(A6)
  920.     BRA.S    mt_jmploop
  921.  
  922. mt_SetLoop
  923.     MOVE.W    mt_PatternPos(PC),D0
  924.     LSR.W    #4,D0
  925.     MOVE.B    D0,n_pattpos(A6)
  926.     RTS
  927.  
  928. mt_SetTremoloControl
  929.     MOVE.B    n_cmdlo(A6),D0
  930.     AND.B    #$0F,D0
  931.     LSL.B    #4,D0
  932.     AND.B    #$0F,n_wavecontrol(A6)
  933.     OR.B    D0,n_wavecontrol(A6)
  934.     RTS
  935.  
  936. mt_RetrigNote
  937.     MOVE.L    D1,-(SP)
  938.     MOVEQ    #0,D0
  939.     MOVE.B    n_cmdlo(A6),D0
  940.     AND.B    #$0F,D0
  941.     BEQ.S    mt_rtnend
  942.     MOVEQ    #0,D1
  943.     MOVE.B    mt_counter(PC),D1
  944.     BNE.S    mt_rtnskp
  945.     MOVE.W    (A6),D1
  946.     AND.W    #$0FFF,D1
  947.     BNE.S    mt_rtnend
  948.     MOVEQ    #0,D1
  949.     MOVE.B    mt_counter(PC),D1
  950. mt_rtnskp
  951.     DIVU    D0,D1
  952.     SWAP    D1
  953.     TST.W    D1
  954.     BNE.S    mt_rtnend
  955. mt_DoRetrig
  956.     MOVE.W    n_dmabit(A6),$DFF096    ; Channel DMA off
  957.     MOVE.L    n_start(A6),(A5)    ; Set sampledata pointer
  958.     MOVE.W    n_length(A6),4(A5)    ; Set length
  959.     MOVE.W    #300,D0
  960. mt_rtnloop1
  961.     DBRA    D0,mt_rtnloop1
  962.     MOVE.W    n_dmabit(A6),D0
  963.     BSET    #15,D0
  964.     MOVE.W    D0,$DFF096
  965.     MOVE.W    #300,D0
  966. mt_rtnloop2
  967.     DBRA    D0,mt_rtnloop2
  968.     MOVE.L    n_loopstart(A6),(A5)
  969.     MOVE.L    n_replen(A6),4(A5)
  970. mt_rtnend
  971.     MOVE.L    (SP)+,D1
  972.     RTS
  973.  
  974. mt_VolumeFineUp
  975.     TST.B    mt_counter
  976.     BNE    mt_Return2
  977.     MOVEQ    #0,D0
  978.     MOVE.B    n_cmdlo(A6),D0
  979.     AND.B    #$F,D0
  980.     BRA    mt_VolSlideUp
  981.  
  982. mt_VolumeFineDown
  983.     TST.B    mt_counter
  984.     BNE    mt_Return2
  985.     MOVEQ    #0,D0
  986.     MOVE.B    n_cmdlo(A6),D0
  987.     AND.B    #$0F,D0
  988.     BRA    mt_VolSlideDown2
  989.  
  990. mt_NoteCut
  991.     MOVEQ    #0,D0
  992.     MOVE.B    n_cmdlo(A6),D0
  993.     AND.B    #$0F,D0
  994.     CMP.B    mt_counter(PC),D0
  995.     BNE    mt_Return2
  996.     CLR.B    n_volume(A6)
  997.     MOVE.W    #0,8(A5)
  998.     RTS
  999.  
  1000. mt_NoteDelay
  1001.     MOVEQ    #0,D0
  1002.     MOVE.B    n_cmdlo(A6),D0
  1003.     AND.B    #$0F,D0
  1004.     CMP.B    mt_Counter,D0
  1005.     BNE    mt_Return2
  1006.     MOVE.W    (A6),D0
  1007.     BEQ    mt_Return2
  1008.     MOVE.L    D1,-(SP)
  1009.     BRA    mt_DoRetrig
  1010.  
  1011. mt_PatternDelay
  1012.     TST.B    mt_counter
  1013.     BNE    mt_Return2
  1014.     MOVEQ    #0,D0
  1015.     MOVE.B    n_cmdlo(A6),D0
  1016.     AND.B    #$0F,D0
  1017.     TST.B    mt_PattDelTime2
  1018.     BNE    mt_Return2
  1019.     ADDQ.B    #1,D0
  1020.     MOVE.B    D0,mt_PattDelTime
  1021.     RTS
  1022.  
  1023. mt_FunkIt
  1024.     TST.B    mt_counter
  1025.     BNE    mt_Return2
  1026.     MOVE.B    n_cmdlo(A6),D0
  1027.     AND.B    #$0F,D0
  1028.     LSL.B    #4,D0
  1029.     AND.B    #$0F,n_glissfunk(A6)
  1030.     OR.B    D0,n_glissfunk(A6)
  1031.     TST.B    D0
  1032.     BEQ    mt_Return2
  1033. mt_UpdateFunk
  1034.     MOVEM.L    A0/D1,-(SP)
  1035.     MOVEQ    #0,D0
  1036.     MOVE.B    n_glissfunk(A6),D0
  1037.     LSR.B    #4,D0
  1038.     BEQ.S    mt_funkend
  1039.     LEA    mt_FunkTable(PC),A0
  1040.     MOVE.B    (A0,D0.W),D0
  1041.     ADD.B    D0,n_funkoffset(A6)
  1042.     BTST    #7,n_funkoffset(A6)
  1043.     BEQ.S    mt_funkend
  1044.     CLR.B    n_funkoffset(A6)
  1045.  
  1046.     MOVE.L    n_loopstart(A6),D0
  1047.     MOVEQ    #0,D1
  1048.     MOVE.W    n_replen(A6),D1
  1049.     ADD.L    D1,D0
  1050.     ADD.L    D1,D0
  1051.     MOVE.L    n_wavestart(A6),A0
  1052.     ADDQ.L    #1,A0
  1053.     CMP.L    D0,A0
  1054.     BLO.S    mt_funkok
  1055.     MOVE.L    n_loopstart(A6),A0
  1056. mt_funkok
  1057.     MOVE.L    A0,n_wavestart(A6)
  1058.     MOVEQ    #-1,D0
  1059.     SUB.B    (A0),D0
  1060.     MOVE.B    D0,(A0)
  1061. mt_funkend
  1062.     MOVEM.L    (SP)+,A0/D1
  1063.     RTS
  1064.  
  1065.  
  1066. mt_FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  1067.  
  1068. mt_VibratoTable    
  1069.     dc.b   0, 24, 49, 74, 97,120,141,161
  1070.     dc.b 180,197,212,224,235,244,250,253
  1071.     dc.b 255,253,250,244,235,224,212,197
  1072.     dc.b 180,161,141,120, 97, 74, 49, 24
  1073.  
  1074. mt_PeriodTable
  1075. ; Tuning 0, Normal
  1076.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1077.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1078.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  1079. ; Tuning 1
  1080.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1081.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1082.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  1083. ; Tuning 2
  1084.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1085.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1086.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  1087. ; Tuning 3
  1088.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1089.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1090.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1091. ; Tuning 4
  1092.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1093.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1094.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1095. ; Tuning 5
  1096.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1097.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1098.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1099. ; Tuning 6
  1100.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1101.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1102.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1103. ; Tuning 7
  1104.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1105.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1106.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1107. ; Tuning -8
  1108.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1109.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1110.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1111. ; Tuning -7
  1112.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1113.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1114.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1115. ; Tuning -6
  1116.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1117.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1118.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1119. ; Tuning -5
  1120.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1121.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1122.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1123. ; Tuning -4
  1124.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1125.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1126.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1127. ; Tuning -3
  1128.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1129.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1130.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1131. ; Tuning -2
  1132.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1133.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1134.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1135. ; Tuning -1
  1136.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1137.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1138.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1139.  
  1140. mt_chan1temp    dc.l    0,0,0,0,0,$00010000,0,  0,0,0,0
  1141. mt_chan2temp    dc.l    0,0,0,0,0,$00020000,0,  0,0,0,0
  1142. mt_chan3temp    dc.l    0,0,0,0,0,$00040000,0,  0,0,0,0
  1143. mt_chan4temp    dc.l    0,0,0,0,0,$00080000,0,  0,0,0,0
  1144.  
  1145. mt_SampleStarts    dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1146.         dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1147.  
  1148. mt_SongDataPtr    dc.l 0
  1149.  
  1150. mt_speed    dc.b 6
  1151. mt_counter    dc.b 0
  1152. mt_SongPos    dc.b 0
  1153. mt_PBreakPos    dc.b 0
  1154. mt_PosJumpFlag    dc.b 0
  1155. mt_PBreakFlag    dc.b 0
  1156. mt_LowMask    dc.b 0
  1157. mt_PattDelTime    dc.b 0
  1158. mt_PattDelTime2    dc.b 0,0
  1159.  
  1160. mt_PatternPos    dc.w 0
  1161. mt_DMACONtemp    dc.w 0
  1162.  
  1163. Equalizer1:    dc.w 0
  1164. Equalizer2:    dc.w 0
  1165. Equalizer3:    dc.w 0
  1166. Equalizer4:    dc.w 0
  1167.  
  1168. ;/* End of File */
  1169.